﻿using System;
using System.Collections.Generic;
using DLM.Infrastructure;
using DLM.Domain.Model;
using DLM.Web.ViewModel;
using DLM.Domain.DTO;

namespace DLM.Services.Interfaces
{
    public interface IPartyService
    {
        #region Party
        void AddParty(PartyPageView view);

        void UpdateParty(Party party);

        void RemoveParty(Party party);

        IEnumerable<Party> GetParty();

        IEnumerable<Party> GetParty(int pageIndex, int pageSize);

        IEnumerable<Party> GetLatestParty(PartyType type);

        IEnumerable<PartyDTO> MyPublish(string userName, int pageIndex, int pageSize);

        IEnumerable<PartyDTO> MyEngaged(string userName, int pageIndex, int pageSize);

        IEnumerable<PartyDTO> MyInterest(int[] typeArray,string accountName, int pageIndex, int pageSize);

        Party GetParty(int partyID);

        PartyDetailPageView ViewParty(int partyID, string userName);

        IEnumerable<Party> GetParty(PartyType type, int pageIndex, int pageSize);

        PartyPageView MyParty(PartyPageView view, int pageIndex, int pageSize);

        IEnumerable<PartyDTO> ShowParty(PartyType type, int pageIndex, int pageSize);

        IEnumerable<Party> GetParty(PartyStatus staus, int pageIndex, int pageSize);

        void Attend(PartyPageView view);

        void Quit(PartyPageView view);

        IEnumerable<Party> SearchParty(string key, PartyType type);

        bool IsAttended(string userName, int partyID);

        bool IsLead(string userName, int partyID);

        IEnumerable<PartyDTO> SearchParty(int pageIndex, int pageSize, string type, string location, string partyType, string partyDate);

        IEnumerable<Party> GetPartyByPblish(string publisher, int pageIndex, int pageSize);

        IEnumerable<PartyDTO> MyRecentParties(string userName, int pageIndex, int pageSize);

        void BatchQuit(int partyID);
        #endregion
   

        #region Remark Service
        Remark GetRemark(int remarkID);

        IEnumerable<Remark> GerRemarkByParty(int partyID, int pageIndex, int pageSize);

        void AddRemark(Remark remark);

        void RemoveRemark(Remark remark);

        IEnumerable<RemarkDTO> GetRemarkDTO(int partyID, int pageIndex, int pageSize);
        #endregion

        #region Invitation

        void Invite(Invitation invatation);

        void Invite(List<Invitation> invatation);

        void ConfirmInvitation(int invitationID);

        IEnumerable<Invitation> GetInvitation(string accountName, int pageIndex, int pageSize);

        IEnumerable<InvitationDTO> GetInvitationDTO(string accountName, int pageIndex, int pageSize);

        IEnumerable<InvitationHistoryDTO> GetInvitationHistoryDTO(string accountName, int pageIndex, int pageSize);

        #endregion

        #region BonusLog
        IEnumerable<BonusLog> GetBonusLog(string accountName, int pageIndex, int pageSize);

        void AddBonusLog(BonusLog log);


        void DeleteBonusLog(BonusLog log);
        #endregion

        #region Bonud
        Bonus GetBonus(string accountName);

        void AddBonus(Bonus bonuse);

        void UpdateBonus(Bonus bonus);

        void AddBonus(IEnumerable<Bonus> list);

        void UpdateBonus(IEnumerable<Bonus> list);
        #endregion

        #region Party
        void AddPartyType(string name, int type);

        void UpdatePartyType(int pid, string name);

        void RemovePartyType(int pid);

        decimal SuccessRate(string accountName);

        IEnumerable<DLM.Domain.Model.Type> GetPartyType();
        #endregion

        #region Modality
        void AddModality(Modality modality);

        void UpdateModality(Modality modality);

        void RemoveModality(int mid);

        Modality GetModality(int mid);

        IEnumerable<ModalityDTO> GetModalityDTOByType(int partyID,int pageIndex,int pageSize);

        IEnumerable<ModalityDTO> GetModalityDTO(int pageIndex, int pageSize);

        IEnumerable<Modality> GetModalityByType(int pid);
        #endregion

        #region Supplier
        void AddSupplier(Supplier supplier);

        void UpdateSupplier(Supplier supplier);

        void RemoveSupplier(int sid);

        IEnumerable<Supplier> GetSupplier(int pageIndex, int pageSize);

        IEnumerable<Supplier> GetSupplier(int mid);

        IEnumerable<Supplier> GetSupplier(int mid, int pageIndex, int pageSize);

        #endregion

        #region Email Invitation
        void SendEmailInvitation(EmailInvitation invitation);
        #endregion

        #region Party Album
        IEnumerable<PartyAlbum> GetPartyAlbum(int partyID, int pageIndex, int pageSize);

        PartyAlbum GetPartyAlbum(int paid);

        void AddAlbum(PartyAlbum album);

        void DeleteAlbum(int paid);
        #endregion

  
    }
}
